package org.footballmanager.pandafootball.system.service;

import org.footballmanager.pandafootball.system.domain.FootBfinfo;
import org.footballmanager.pandafootball.system.domain.FootSj;
import org.footballmanager.pandafootball.system.domain.FootUser;
import org.footballmanager.pandafootball.system.domain.enums.BFLX;
import org.footballmanager.pandafootball.system.form.impl.FootBfinfoSearchForm;
import org.springframework.ui.Model;
import org.springframework.validation.BindingResult;

import javax.servlet.http.HttpServletRequest;
import javax.validation.Valid;
import java.util.List;

public interface FootBfinfoService extends BaseService<FootBfinfo> {
	/**
	 * 找到可以报分的用户，根据赛季信息和报分类型
	 * @param user
	 * @param sj
	 * @param type
	 * @return
	 */
	List<FootUser> findCanBfUser(FootUser user, FootSj sj, Integer type);
	
	/**
	 * 根据用户主键和赛季来获取用户报分信息
	 * @param userId
	 * @param sj
	 * @return
	 */
	List<FootBfinfo> getSubmitData(Long userId, Long sj);
	
	/**
	 * 根据用户主键来获取友谊赛报分信息
	 * @param userId
	 * @return
	 */
	List<FootBfinfo> findYysByUserId(Long userId);

	/**
	 * 根据用户主键和任务数，查询对应已经完成的任务数
	 * @param userId
	 * @param missionnum
	 * @return
	 */
	Integer countMissionNumByUserId(Long userId, int missionnum);
	
	/**
	 * 根据用户主键和报分类型查是否可以报分
	 * @param userId
	 * @param bflx
	 * @return
	 */
	boolean isGoOnBf(Long userId, BFLX bflx);

	/**
	 * 根据报分记录查常规赛2场限制
	 * @param t
	 * @return
	 */
	boolean isGoOnBf(FootBfinfo t);

    /**
     * 翻页方法
     * @param footBfinfoSearchForm 条件
     * @return 列表
     */
    List<FootBfinfo> findall(FootBfinfoSearchForm footBfinfoSearchForm);

    /**
     * 查询
     * @param entityname 实体类名
     * @param map 参数
     * @param footBfinfoSearchForm 条件
     */
    void search(String entityname, Model map, FootBfinfoSearchForm footBfinfoSearchForm);

    /**
     * 删除所有
     * @param footBfinfoSearchForm 条件
     * @param request 请求
     * @return 类型
     */
    int deleteAll(FootBfinfoSearchForm footBfinfoSearchForm, HttpServletRequest request);

    /**
     * 添加报分
     * @param user 用户
     * @param map 参数
     * @param type 类型
     * @param request 请求
     */
    String add(FootUser user, Model map, Integer type, HttpServletRequest request);

    /**
     * 确认报分
     * @param footBfinfo 报分信息
     * @param request 请求
     */
    void makesure(FootBfinfo footBfinfo, HttpServletRequest request);

    /**
     * 返回页面
     * @param footBfinfo 报分实体类
     * @param map 参数
     * @param user 用户
     * @param request 请求
     * @return 页面
     */
    String processReturnPage(@Valid FootBfinfo footBfinfo, Model map, FootUser user, HttpServletRequest request);

    /**
     * 处理错误页面
     * @param footBfinfo 实体类
     * @param bindingResult 校验
     * @param request 请求
     */
    void processError(@Valid FootBfinfo footBfinfo, BindingResult bindingResult, HttpServletRequest request);

    /**
     * 返回列表页面
     * @param footBfinfoSearchForm 条件
     * @param isSearchPage 是否是查询页面
     * @return 页面
     */
    String searchPage(FootBfinfoSearchForm footBfinfoSearchForm, boolean isSearchPage);

    /**
     * 查看页面
     * @param id 主键
     * @param map 参数
     * @param request 请求
     * @param footBfinfoSearchForm 条件
     * @param isViewPage 是否是查看页面
     * @return 页面
     */
    String view(Long id, Model map, HttpServletRequest request, FootBfinfoSearchForm footBfinfoSearchForm, boolean isViewPage);
}